package com.wave.system.service;

import com.wave.common.core.domain.PageQuery;
import com.wave.common.core.page.TableDataInfo;
import com.wave.system.domain.SysProduceArrange;
import com.wave.system.domain.bo.SysProduceArrangeBo;
import com.wave.system.domain.vo.SysProduceArrangeVo;

import java.util.Collection;
import java.util.List;

/**
 * 生产排布Service接口
 *
 * @author wave
 * @date 2024-10-12
 */
public interface ISysProduceArrangeService {

    /**
     * 查询生产排布
     */
    SysProduceArrangeVo queryById(Long id);

    /**
     * 查询生产排布列表
     */
    TableDataInfo<SysProduceArrangeVo> queryPageList(SysProduceArrangeBo bo, PageQuery pageQuery);

    /**
     * 查询生产排布列表
     */
    List<SysProduceArrangeVo> queryList(SysProduceArrangeBo bo);

    /**
     * 新增生产排布
     */
    Boolean insertByBo(SysProduceArrangeBo bo);

    /**
     * 修改生产排布
     */
    Boolean updateByBos(List<SysProduceArrangeBo> bos);

    /**
     * 校验并批量删除生产排布信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 根据sn码获取放料线号
     *
     * @param snCode
     * @param isArm1
     * @return
     */
    Integer confirmLineNumberBySnCode(String snCode, Boolean isArm1);

    /**
     * 根据工装架编号获取放料号
     *
     * @param shelfNumber
     * @return
     */
    Integer confirmSlotNumberByShelfNumber(String shelfNumber);

    /**
     * 根据生产排布获取缓存位
     *
     * @param list
     * @return
     */
    Integer getCacheBitByProduceArrange(List<SysProduceArrange> list);

    /**
     * 根据物料情况自动调度获取缓存位
     *
     * @param productCode
     * @return
     */
    Integer getCacheBitByAutoDispatch(String productCode);

    /**
     * 调用MES匹配物料信息
     *
     * @param snCode
     * @return
     */
    String checkPackInfoBySnCode(String snCode);

    /**
     * 调用MES上报工装架和物料集合消息
     *
     * @param lineNumber
     * @param type       0-校验是否自动完成工装架任务 （A1放料完成  A3放料完成  手动完成工装板任务）
     *                   1-手动完成工装架任务
     * @return
     */
    public void pushMesCheck(int lineNumber, int type);

    /**
     * 根据snCode和芯片版本匹配生产排布设置
     *
     * @param snCode
     * @param chipVersionCode
     * @return
     */
    List<SysProduceArrange> matchArrangeBySnCodeVersion(String snCode, String chipVersionCode);

    /**
     * 校验重复的currentSnCode
     * @param lineNumber
     * @param snCode
     */
    void checkRepeatCurrentSnCode(Integer lineNumber, String snCode);
}
